﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GenIX.StyleSpace;
namespace GenIX
{
    //<DESCRIPTION>    Открытые методы класса   combobox  Содержит массив списков.
    
     // *      bool Add(comboList clist)                <ADD>Сохраняем список в XML и Массив списков объекта</ADD>
     // *      bool Change(comboList clist)             <CHANGE>Сохраняем измененный список в XML и Массив списков объекта</CHANGE>
     // *      bool Remove(string name)                 <REMOVE>Удаляет список по его имени из XML и Массива списков объекта</REMOVE> 
     // *      comboList Get(string name)               <GET>Возвращает список </GET>  
     // *      comboList Get(int i)                     <GET>Возвращает список </GET>  
     // *      int Count()                              <COUNT>Возвращает количество списков в Масиве </COUNT>
     // *      string[] GetListName()                   <GETLISTNAME> Возвращает имена списков, из Массива списков </GETLISTNAME>
     
     //      Открытые методы класса   comboList        <COMBOLIST> С XML не работает.. Всю обработку производит  класс combobox; </COMBOLIST> 
     // * 
     // *    List<string> items= = new List<string>();   содержит в себе элементы списка
     //      string name;                                имя списка
     // *    void Add(string name)                       добавляет новый элемент в список
     // *    void Remove(string name)                    удаляет элемент из списка
     // *    string[] GetItems()                         Возвращает массив элементов
     //*     void Add(string[] name)                     заносит массив элемент
     // *    
     // * 
     // *  пример .... 
     // *       
     // *    Создаем список... и добовляем в него элементы
     // *    combolist list = new list("Люди");
     // *    list.Add("Мужчины");
     // *    list.Add("Дети");
     // *    list.Add("Женщины");
     // *    
     // *    Создаем массив списков для сериализация и десериализации объект в XML стандарт ...
     // *    combobox combobox = new combobox();
     // *    combobox.Add(list);    // произвели запись в XML и добавили в массив
     // * 
     //      combolist Changelist = new list("Люди");
     // *    list.Add("1. Мужчины");
     // *    list.Add("2. Дети");
     // *    list.Add("3. Женщины");
     // *    
     // *   combobox.Change(Changelist);    // производим изменение в XML и Массиве.. поиск идет по имени те Changelist.name = Люди
     // *   
     // *   combobox.Remove("Люди"); // удаляем из XML и Массива 
     // *   
     // *  string[] listName = combobox.GetListName(); // вернет имена всех списков ... типа Люди, Животные, Страны
     // * 
     // *  combolist NewList = comboList Get("Люди");  получаем список по его имени
     // *  
     // *  string[] element = Newlist.GetItems(); // вернет массив элементов   element[0] = "1. Мужчины", element[1] = "2. Дети"
     // *  
     // *</DESCIPTION>

    public partial class InItems : Form
    {
         
        //<TEMPCOMBO>ВРЕМЕННЫЙ  ОБЪЕКТ</TEMPCOMBO>
        combobox tempCombo;
        //<CURRITEM>Содержит имя списка. которы требуется сохранить</CURRITEM>
        string currItem = "";
        public InItems()
        {
            InitializeComponent();
            
            //<TEMPCOMBO>Клонирование объект и создание временного файла</TEMPCOMBO>
            tempCombo = (combobox)Styleform.comboDoc.Clone();
        }
        private void Save(string name)
        {
            if (ReturnElement().Count() > 0)
            {
                comboList tempList = tempCombo.Get(name.Trim());
                tempList.LoadList(ReturnElement());

                tempCombo.Change(tempList);

            }
        }
        //<BUILDING>Читает элементы из списка</BUILDING>
        private void Building(string name)
        {
            richTextBox1.Text = "";
            comboList tempList = tempCombo.Get(name);
            for (int i = 0; i < tempList.Count(); i++)
                //<FILL_CONTROL> заполняем  Control </FILL_CONTROL>
                richTextBox1.Text += tempList.items[i] + "\r\n";   
            this.currItem = name;
        }
        private void Select(object sender, EventArgs e)
        {
            if (listBox1.Items.Count > 0)
            {
                Save(currItem);
                Building(listBox1.SelectedItem.ToString());
            }
            else richTextBox1.Text = "";
        }
        //<RETURNELEMENT>Разбиваем строки в массив, и удаляем пустые элементы</RETURNELEMENT>
        private string[] ReturnElement()
        {
            string[] temp = richTextBox1.Text.Split(new char[] { '\r', '\n' });
            List<string> tempList = new List<string>();
            for (int i = 0; i < temp.Count(); i++)
                if (temp[i].Trim() != "")
                    tempList.Add(temp[i]);
            temp = new string[tempList.Count()];
            tempList.CopyTo(temp);
            return temp;
        }
        private void InItems_Load(object sender, EventArgs e)
        {
            Styleform.SelectElement(this, Styleform.choseStyleName);
            richTextBox1.Text = "";
            listBox1.Items.Clear();
            if (tempCombo.NoBag == false)
            {
                MessageBox.Show(tempCombo.Err);
                this.Close();
            }
            //<IF_WORKING> если нет списков не работаем</<IF_WORKING>>
            if (tempCombo.Count() == 0) return; 
            listBox1.Items.AddRange(tempCombo.GetListName());
            listBox1.SelectedItem = listBox1.Items[0];
            Building(listBox1.SelectedItem.ToString());
            currItem = listBox1.SelectedItem.ToString().Trim();

        }
        //<ADDLIST>Вызывает форма NewCombo , создает новый список</ADDLIST>
        public void AddList(string name)
        {
            comboList list = new comboList(name);
            if (this.tempCombo.Add(list))
            {
                this.Building(list.name);
                listBox1.SelectedIndex = listBox1.Items.Add(list.name);
            }
        }
        //<DELL>Удаляет</DELL>
        private void button4_Click(object sender, EventArgs e)
        {
            int count = listBox1.Items.Count;
            if (count > 1)
            {
                string temp = listBox1.SelectedItem.ToString();
                int curItem = listBox1.Items.IndexOf(temp);

                if (curItem == count - 1)
                {
                    listBox1.SelectedItem = listBox1.Items[curItem - 1];
                    tempCombo.Remove(temp);
                    Building(listBox1.SelectedItem.ToString());
                    listBox1.Items.Remove(temp);
                }
                else
                {
                    listBox1.SelectedItem = listBox1.Items[curItem + 1];
                    tempCombo.Remove(temp);
                    Building(listBox1.SelectedItem.ToString());
                    listBox1.Items.Remove(temp);
                }

            }
            else if (count == 1)
            {
                var item = listBox1.SelectedItem;
                tempCombo.Remove(item.ToString());
                listBox1.Items.Remove(item);
                currItem = "";

            }
        }
        //<SAVE>Сохраняет изменения в XML и массив списка. удаляет временный файл</SAVE>
        private void button1_Click(object sender, EventArgs e)
        {
            Save(currItem);

            Styleform.comboDoc.LoadList(this.tempCombo.GetList());
            MainForm mainform = this.Owner as MainForm;
            Styleform.SelectElement(mainform, Styleform.choseStyleName);
            
        }
        //<DELL>Вызывает форму NewCombo для создания списка</DELL>
        private void button3_Click(object sender, EventArgs e)
        {
            NewCombo form = new NewCombo();
            form.ShowDialog(this);
        }
        //<CLOSE>Перед закрытием удаляем времянку</CLOSE>
        private void button2_Click(object sender, EventArgs e)
        {
            //<GETLIST> Возращяет массив списка и удаляет свой временный файл</GETLIST>
            this.tempCombo.GetList();
            this.Close();
        }


    }
}
